gl renderer: Ignore rendering if accumulated opacity is too small
authorTimm Bäder <mail@baedert.org>
Thu, 1 Oct 2020 06:29:10 +0000 (08:29 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 14 Oct 2020 19:06:12 +0000 (15:06 -0400)
gsk/gl/gskglrenderer.c

index edf6f402cea4d2800943542f33fdbdec5d39ede3..9233799e0c40a3cb94d17d60c684c89621126adc 100644 (file)
@@ -1375,20 +1375,24 @@ render_opacity_node (GskGLRenderer   *self,
       prev_opacity = ops_set_opacity (builder,
                                       builder->current_opacity * opacity);
 
-      ops_set_program (builder, &self->programs->blit_program);
-      ops_set_texture (builder, region.texture_id);
+      if (builder->current_opacity >= ((float) 0x00ff / (float) 0xffff))
+        {
+          ops_set_program (builder, &self->programs->blit_program);
+          ops_set_texture (builder, region.texture_id);
 
-      load_vertex_data_with_region (ops_draw (builder, NULL),
-                                    node, builder,
-                                    &region,
-                                    is_offscreen);
+          load_vertex_data_with_region (ops_draw (builder, NULL),
+                                        node, builder,
+                                        &region,
+                                        is_offscreen);
+        }
     }
   else
     {
       prev_opacity = ops_set_opacity (builder,
                                       builder->current_opacity * opacity);
 
-      gsk_gl_renderer_add_render_ops (self, child, builder);
+      if (builder->current_opacity >= ((float) 0x00ff / (float) 0xffff))
+        gsk_gl_renderer_add_render_ops (self, child, builder);
     }
 
   ops_set_opacity (builder, prev_opacity);